Reactã®useDeferredValueããã¯ã®å æ¬çãªã¬ã€ããããã©ãŒãã³ã¹ãšå¿çæ§ã®é«ããŠãŒã¶ãŒã€ã³ã¿ãŒãã§ãŒã¹ãæ§ç¯ããããã®å©ç¹ããŠãŒã¹ã±ãŒã¹ãå®è£ æŠç¥ãæ¢ããŸãã
React useDeferredValue: ãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãåäžãããããã®é å»¶å€ã¢ããããŒãã®ãã¹ã¿ãŒ
ãŠã§ãéçºã®çµ¶ãéãªãé²åã®äžã§ãããã©ãŒãã³ã¹ãšå¿çæ§ã®é«ããŠãŒã¶ãŒã€ã³ã¿ãŒãã§ãŒã¹ãäœæããããšãæãéèŠã§ããUIãæ§ç¯ããããã®åºãæ¡çšãããŠããJavaScriptã©ã€ãã©ãªã§ããReactã¯ãããã©ãŒãã³ã¹ãæé©åããããã®ããŸããŸãªããŒã«ãæäŸããŸããäžã§ããuseDeferredValueããã¯ã¯ãUIã®éèŠåºŠã®äœãéšåãžã®ã¢ããããŒããé
ãããå
šäœçãªãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãåäžãããããã®åŒ·åãªã¡ã«ããºã ãšããŠéç«ã£ãŠããŸãããã®å
æ¬çãªã¬ã€ãã§ã¯ãuseDeferredValueã®è€éããæãäžãããã®å©ç¹ããŠãŒã¹ã±ãŒã¹ãããã³å®çšçãªå®è£
æŠç¥ãæ¢ããŸãã
é å»¶ã¢ããããŒãã®å¿ èŠæ§ãçè§£ãã
useDeferredValueã®è©³çްã«å
¥ãåã«ãããã察åŠããæ ¹æ¬çãªåé¡ãçè§£ããããšãéèŠã§ããå€ãã®Reactã¢ããªã±ãŒã·ã§ã³ã§ã¯ãç¹å®ã®UIèŠçŽ ãä»ã®èŠçŽ ãããéèŠã§ããããšãã°ãæ€çŽ¢å
¥åãã£ãŒã«ãã¯å¿çæ§ãé«ãããŠãŒã¶ãŒãå
¥åãããšããã«ãã£ãŒãããã¯ãæäŸããå¿
èŠããããŸãããã ããæ€çŽ¢çµæã®ãªã¹ãã¯éèŠã§ãããå¿
ãããç¬æã«æŽæ°ããå¿
èŠã¯ãããŸãããæ€çŽ¢çµæã®ã¢ããããŒããé
ãããããšã§ãã¢ããªã±ãŒã·ã§ã³ã¯å
¥åãã£ãŒã«ãã®å¿çæ§ãåªå
ããããšãã§ããããã¹ã ãŒãºãªãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ã«ã€ãªãããŸãã
ãŠãŒã¶ãŒãå€§èŠæš¡ãªããŒã¿ã»ããããã£ã«ã¿ãªã³ã°ããæ€çŽ¢ããŒã«ã¯ãšãªãå ¥åããŠããã·ããªãªãèããŠã¿ãŠãã ãããããŒã¹ãããŒã¯ããšã«ãªã¹ãå šäœãåã¬ã³ããªã³ã°ãããé¡èãªé å»¶ãšã€ã©ã€ã©ãããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãçºçããå¯èœæ§ããããŸãããªã¹ãã®ã¢ããããŒããé ãããããšã§ãReactã¯å ¥åãã£ãŒã«ããè¿ éã«ã¬ã³ããªã³ã°ããããšã«éäžã§ãããªã¹ãã®ã¢ããããŒãã«å°ãæéãããã£ãŠããã¢ããªã±ãŒã·ã§ã³ã®å¿çæ§ãåäžããŸãã
useDeferredValueã®ç޹ä»ïŒReactã®é å»¶ã¢ããããŒãã®ãœãªã¥ãŒã·ã§ã³
React 18ã§å°å
¥ãããuseDeferredValueããã¯ã¯ãå€ã®ã¢ããããŒããé
ãããç°¡åãªæ¹æ³ãæäŸããŸããå€ãå
¥åãšããŠæž¡ããããã®å€ã®æ°ããé
å»¶ããŒãžã§ã³ãè¿ããŸããReactã¯ãé
å»¶å€ãæçµçã«ææ°ã®å€ã«æŽæ°ãããããšãä¿èšŒããŸãããã¡ã€ã³ã¹ã¬ããã®ãããã¯ãåé¿ããå¿çæ§ãç¶æããããã«ã¢ããããŒããé
å»¶ãããå ŽåããããŸãã
useDeferredValueã®ä»çµã¿
å
éšçã«ã¯ãuseDeferredValueã¯Reactã®äžŠè¡åŠçæ©èœãå©çšããŠãé
å»¶å€ãžã®ã¢ããããŒããäœãåªå
床ã§ã¹ã±ãžã¥ãŒã«ããŸããæ°ããå€ãuseDeferredValueã«æž¡ããããšãReactã¯é
å»¶å€ãããã«æŽæ°ããŸããã代ããã«ãã¡ã€ã³ã¹ã¬ãããã¢ã€ãã«ç¶æ
ã«ãªãã®ãåŸ
ã£ãŠãããã¢ããããŒããã¹ã±ãžã¥ãŒã«ããŸããããã«ããããŠãŒã¶ãŒå
¥åã®åŠçãéèŠãªUIã¢ããããŒããªã©ãåªå
床ã®é«ãã¿ã¹ã¯ããéèŠåºŠã®äœãã¢ããããŒãã«ãã£ãŠãããã¯ãããªãããã«ãªããŸãã
éèŠãªååã¯åªå
é äœä»ãã§ããReactã¯ããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ã®èªèã«æãè²¢ç®ããæäœãåªå
ããŸããuseDeferredValueã§å€ãããŒã¯ããããšã«ãããReactã«ããã®å€æŽã¯ä»ããè¡ãå¿
èŠã¯ãããŸãããããéèŠãªã¢ããããŒããæåã«å®äºãããŠãããæéããããšãã«ãããã¬ã³ããªã³ã°ããŠãã ããããšäŒããŸãã
useDeferredValueã®ãŠãŒã¹ã±ãŒã¹
useDeferredValueã¯ã次ã®ã·ããªãªã§ç¹ã«åœ¹ç«ã¡ãŸãã
- å€§èŠæš¡ãªãªã¹ããŸãã¯ããŒãã«ã®ã¬ã³ããªã³ã°ïŒãªã¹ãã®ã¢ããããŒããé ãããããšã§ããã£ã«ã¿ãªã³ã°ãŸãã¯ãœãŒãæäœäžã«ã¢ããªã±ãŒã·ã§ã³ãå¿çæ§ãç¶æã§ããããã«ãªããŸãã
- è€éãªUIèŠçŽ ã®ã¢ããããŒãïŒUIèŠçŽ ã«ã³ã¹ãã®ãããèšç®ãŸãã¯ã¬ã³ããªã³ã°æäœãå«ãŸããå Žåããã®ã¢ããããŒããé ãããããšã§ãã¢ããªã±ãŒã·ã§ã³ãé ããªãã®ãé²ãããšãã§ããŸãã
- APIããã®ããŒã¿ã®ãã§ããïŒãã§ãããããããŒã¿ã®è¡šç€ºãé ãããããšã§ãã¢ããªã±ãŒã·ã§ã³ã¯åæã®ãã¬ãŒã¹ãã«ããŒUIããã°ããã¬ã³ããªã³ã°ããããŒã¿ã®ãã§ããäžã«åªãããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãæäŸã§ããŸãã
- èªåææ¡ã«ããæ€çŽ¢å ¥åïŒãŠãŒã¶ãŒãå ¥åãããšãå ¥åãã£ãŒã«ãã®å¿çæ§ãç¶æããããã«ãææ¡ãé ãããããšãã§ããŸãã
ãããã®ãŠãŒã¹ã±ãŒã¹ãå ·äœçãªäŸã§æ¢ã£ãŠã¿ãŸãããã
useDeferredValueã®å®è·µçãªäŸ
äŸ1ïŒãã£ã«ã¿ãªã³ã°ã«ããå€§èŠæš¡ãªãªã¹ãã®ã¬ã³ããªã³ã°
ã¢ã€ãã ã®å€§èŠæš¡ãªãªã¹ããã¬ã³ããªã³ã°ãããŠãŒã¶ãŒãæ€çŽ¢ã¯ãšãªã«åºã¥ããŠãªã¹ãããã£ã«ã¿ãªã³ã°ã§ããããã«ããã³ã³ããŒãã³ããèããŠã¿ãŠãã ããã
import React, { useState, useDeferredValue } from 'react';
function LargeList({
items
}) {
const [query, setQuery] = useState('');
const deferredQuery = useDeferredValue(query);
const filteredItems = items.filter(item =>
item.toLowerCase().includes(deferredQuery.toLowerCase())
);
const handleChange = (event) => {
setQuery(event.target.value);
};
return (
<div>
<input type="text" value={query} onChange={handleChange} placeholder="Search..." />
<ul>
{filteredItems.map(item => (
<li key={item}>{item}</li>
))}
</ul>
</div>
);
}
export default LargeList;
ãã®äŸã§ã¯ãuseDeferredValueã䜿çšããŠãqueryã«åºã¥ããŠfilteredItemsã®ã¢ããããŒããé
ãããŠããŸãããŠãŒã¶ãŒãå
¥åãã£ãŒã«ãã«å
¥åãããšãqueryç¶æ
ãããã«æŽæ°ãããå
¥åãã£ãŒã«ãã®å¿çæ§ãç¶æãããŸãããã ããfilteredItemsã¯ã¡ã€ã³ã¹ã¬ãããã¢ã€ãã«ç¶æ
ã®ãšãã«ã®ã¿æŽæ°ããããªã¹ãã®ã¬ã³ããªã³ã°ã«ãã£ãŠå
¥åãã£ãŒã«ãããããã¯ãããªããªããå
šäœçãªãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãåäžããŸããæ³šïŒ`filteredItems`ã®ã¬ã³ããªã³ã°ã¯èšç®ã³ã¹ãã®é«ãããã»ã¹ã§ãããé
å»¶ã®å¯Ÿè±¡ãšããŠæé©ã§ãã
äŸ2ïŒè€éãªUIèŠçŽ ã®ã¢ããããŒã
ãŠãŒã¶ãŒå ¥åã«åºã¥ããŠè€éãªã°ã©ããŸãã¯ã°ã©ãã衚瀺ããã³ã³ããŒãã³ããæ³åããŠã¿ãŠãã ãããã°ã©ãã®ã¬ã³ããªã³ã°ã«ã¯ãã³ã¹ãã®ãããèšç®ãšã¬ã³ããªã³ã°æäœãå«ãŸããå ŽåããããŸããã°ã©ãã®ã¢ããããŒããé ãããããšã§ãã¢ããªã±ãŒã·ã§ã³ã¯ã°ã©ãã®ã¬ã³ããªã³ã°äžã«å¿çæ§ãç¶æã§ããŸãã
import React, { useState, useDeferredValue, useMemo } from 'react';
import { Chart } from 'chart.js/auto'; // Or any charting library
function ComplexChart({
data
}) {
const [filter, setFilter] = useState('all');
const deferredFilter = useDeferredValue(filter);
// Expensive data processing based on the filter
const processedData = useMemo(() => {
// Simulate a long processing time
let startTime = performance.now();
while (performance.now() - startTime < 50) { /* Do nothing */ }
if (deferredFilter === 'all') {
return data;
} else {
return data.filter(item => item.category === deferredFilter);
}
}, [data, deferredFilter]);
const chartConfig = {
type: 'bar',
data: {
labels: processedData.map(item => item.label),
datasets: [{
label: 'Data Points',
data: processedData.map(item => item.value)
}]
}
};
React.useEffect(() => {
const ctx = document.getElementById('myChart').getContext('2d');
new Chart(ctx, chartConfig);
}, [chartConfig]);
const handleChange = (event) => {
setFilter(event.target.value);
};
return (
<div>
<select value={filter} onChange={handleChange}>
<option value="all">All Categories</option>
<option value="category1">Category 1</option>
<option value="category2">Category 2</option>
</select>
<canvas id="myChart" width="400" height="200"></canvas>
</div>
);
}
export default ComplexChart;
ãã®ã·ããªãªã§ã¯ãprocessedDataã¯deferredFilterã«åºã¥ããŠå°åºãããŸããããããããŠã³ã®éžæã倿Žããããš`filter`ç¶æ
ãããã«æŽæ°ãããŸãããã³ã¹ãã®ãããããŒã¿åŠçïŒé
å»¶ã§ã·ãã¥ã¬ãŒãïŒã¯ãReactã«ç©ºãæéãããå Žåã«ã®ã¿çºçããŸãããŠãŒã¶ãŒã¯ããã£ã«ã¿ãŒãªãã·ã§ã³ã倿Žãããšããã«å¿çæ§ãæããããšãã§ããŸãããã£ãŒãããããã®å€æŽãåæ ããã®ã«å°ãæéãããã£ãŠãã
äŸ3ïŒAPIããã®ããŒã¿ã®ãã§ãã
APIãããã§ãããããããŒã¿ã®è¡šç€ºãé ããããšãåæããŒãæéãæ¹åããããã¹ã ãŒãºãªãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãæäŸã§ããŸããUIãã¬ã³ããªã³ã°ããåã«ããŒã¿ã®ããŒããåŸ ã€ä»£ããã«ãã¢ããªã±ãŒã·ã§ã³ã¯ãã¬ãŒã¹ãã«ããŒUIãããã«ã¬ã³ããªã³ã°ããå©çšå¯èœã«ãªã£ãããã§ãããããããŒã¿ã§ã¢ããããŒãã§ããŸãã
import React, { useState, useEffect, useDeferredValue } from 'react';
function DataDisplay() {
const [data, setData] = useState(null);
const deferredData = useDeferredValue(data);
useEffect(() => {
async function fetchData() {
const response = await fetch('https://api.example.com/data');
const jsonData = await response.json();
setData(jsonData);
}
fetchData();
}, []);
return (
<div>
{deferredData ? (
<ul>
{deferredData.map(item => (
<li key={item.id}>{item.name}</li>
))}
</ul>
) : (
<p>Loading data...</p>
)}
</div>
);
}
export default DataDisplay;
ããã§ã¯ãæåã«ãããŒã¿ã®ããŒãäž...ãã¡ãã»ãŒãžã衚瀺ãããŸãã`data`ããã§ããããããšãuseDeferredValueãä»ããŠ`deferredData`ã«å²ãåœãŠãããŸããReactã¯ããããŒã¿ã®ããŒãäž...ãã¡ãã»ãŒãžããã°ãã衚瀺ããããšãåªå
ããåæã¬ã³ããªã³ã°ããããã¯ããã«ãããŒã¿ãå©çšå¯èœã«ãªã£ããšãã«ã¢ã€ãã ã®ãªã¹ããã¬ã³ããªã³ã°ããŸããããã¯ãèªèãããããã©ãŒãã³ã¹ãåäžãããããã®äžè¬çãªãã¿ãŒã³ã§ãã
äŸ4ïŒèªåææ¡ã«ããæ€çŽ¢å ¥å
èªåææ¡æ©èœä»ãã®æ€çŽ¢å ¥åãããã·ããªãªã§ã¯ãèªåææ¡ã®çµæã®è¡šç€ºãé ããããšãå ¥åãã£ãŒã«ãã®å¿çæ§ãåäžããŸãã
import React, { useState, useDeferredValue, useEffect } from 'react';
function SearchWithSuggestions() {
const [searchTerm, setSearchTerm] = useState('');
const deferredSearchTerm = useDeferredValue(searchTerm);
const [suggestions, setSuggestions] = useState([]);
useEffect(() => {
// Simulate fetching suggestions from an API based on the search term
async function fetchSuggestions() {
if (deferredSearchTerm) {
const response = await fetch(`https://api.example.com/suggestions?q=${deferredSearchTerm}`);
const data = await response.json();
setSuggestions(data);
} else {
setSuggestions([]);
}
}
fetchSuggestions();
}, [deferredSearchTerm]);
const handleChange = (event) => {
setSearchTerm(event.target.value);
};
return (
<div>
<input type="text" value={searchTerm} onChange={handleChange} placeholder="Search..." />
<ul>
{suggestions.map(suggestion => (
<li key={suggestion.id}>{suggestion.label}</li>
))}
</ul>
</div>
);
}
export default SearchWithSuggestions;
searchTermã®ãŠãŒã¶ãŒå
¥åã¯ããã«æŽæ°ãããå¿çæ§ã確ä¿ãããŸãããã ããææ¡ããã§ããããããã®æ¯èŒçé«äŸ¡ãªAPIåŒã³åºããšããã®åŸã®ã¬ã³ããªã³ã°ã¯ãdeferredSearchTermã«åºã¥ããŠããªã¬ãŒãããŸããããã«ãããæ€çŽ¢åè£ãé
ããŠãŠãŒã¶ãŒã®å
¥åãšã¯ã¹ããªãšã³ã¹ã劚ããã®ãé²ããŸãã
useDeferredValueã䜿çšããå©ç¹
useDeferredValueã䜿çšããäž»ãªå©ç¹ã¯ããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ã®åäžã§ããUIã®éèŠåºŠã®äœãéšåãžã®ã¢ããããŒããé
ãããããšã§ãã¢ããªã±ãŒã·ã§ã³ã¯å¿çæ§ãåªå
ãããŠãŒã¶ãŒã«ããã«ãã£ãŒãããã¯ãæäŸã§ããŸããããã«ãããããã¹ã ãŒãºã§æ¥œãããŠãŒã¶ãŒã€ã³ã¿ã©ã¯ã·ã§ã³ãå®çŸããŸãã
å
·äœçã«ã¯ãuseDeferredValueã¯æ¬¡ã®ç¹ã§åœ¹ç«ã¡ãŸãã
- å¿çæ§ã®ç¶æïŒã¡ã€ã³ã¹ã¬ãããè§£æŸããŠããŠãŒã¶ãŒå ¥åããã®ä»ã®åªå 床ã®é«ãã¿ã¹ã¯ãåŠçã§ããããã«ããŸãã
- èªèãããé å»¶ã®åæžïŒéèŠãªUIèŠçŽ ãããã«æŽæ°ãããããããŠãŒã¶ãŒã¯ã¢ããªã±ãŒã·ã§ã³ãããé«éã«èªèããŸãã
- ããã©ãŒãã³ã¹ã®æé©åïŒäžèŠãªåã¬ã³ããªã³ã°ãé²ãããã©ãŠã¶ã®å šäœçãªã¯ãŒã¯ããŒããåæžããŸãã
- UXã®åäžïŒããã¹ã ãŒãºã§çŽæçãªã€ã³ã¿ã©ã¯ã·ã§ã³ãå¯èœã«ããŸãã
èæ ®äºé ãšãã¹ããã©ã¯ãã£ã¹
useDeferredValueã¯åŒ·åãªããŒã«ã§ãããè³¢æã«äœ¿çšãããã¹ããã©ã¯ãã£ã¹ã«åŸãããšãéèŠã§ãã
- é©åãªåè£ã®ç¹å®ïŒã¢ããªã±ãŒã·ã§ã³ãæ³šææ·±ãåæããŠãé
å»¶ã¢ããããŒãã®æ©æµãåããããšãã§ããUIèŠçŽ ãç¹å®ããŸãããã¹ãŠã®å€ã«ç²ç®çã«
useDeferredValueãé©çšããªãã§ãã ããã - é床ã®é å»¶ã®åé¿ïŒã¢ããããŒããé å»¶ããããããšãUIãå€ããªããæ··ä¹±ãæããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ã«ã€ãªããå¯èœæ§ããããŸããå¿çæ§ãšããŒã¿ã®æ£ç¢ºãã®é©åãªãã©ã³ã¹ãèŠã€ããŠãã ããã
- ããã©ãŒãã³ã¹ã®æž¬å®ïŒããã©ãŒãã³ã¹ç£èŠããŒã«ã䜿çšããŠã
useDeferredValueãã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ã«äžãã圱é¿ã枬å®ããŸãããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãå®éã«åäžããŠããããšã確èªããŠãã ãããReact Profilerã¯åªããéžæè¢ã§ãã - ä»£æ¿ææ®µã®æ€èšïŒå Žåã«ãã£ãŠã¯ãã¡ã¢åãä»®æ³åãªã©ã®ä»ã®æé©åææ³ãã
useDeferredValueãããé©åã§ããå¯èœæ§ããããŸããuseMemoãuseCallbackãããã³ãŠã£ã³ããŠã©ã€ãã©ãªïŒ`react-window`ãªã©ïŒã¯ãç¹å®ã®ã¬ã³ããªã³ã°ã·ããªãªãæé©åããã®ã«æé©ã§ãã - ãã©ã³ãžã·ã§ã³ã€ã³ãžã±ãŒã¿ãŒã®äœ¿çšïŒé å»¶å€ãæŽæ°ãããŠããããšã瀺ãèŠèŠçãªåå³ïŒããŒãã¹ãããŒã埮åŠãªã¢ãã¡ãŒã·ã§ã³ãªã©ïŒãæäŸããããšãæ€èšããŠãã ãããããã«ãããUIãããªãŒãºããŠããããããŒã¿ããŸããªãæŽæ°ãããããšããŠãŒã¶ãŒãçè§£ã§ããããã«ãªããŸãã
- ã°ããŒãã«ãªèŠç¹ïŒããŸããŸãªå°åã®ãããã¯ãŒã¯ç¶æ³ã«æ³šæããŠãã ãããããå Žæã§ã¯ç¥èŠã§ããªãé å»¶ããå¥ã®å Žæã§ã¯é¡èã«ãªãå¯èœæ§ããããŸãã
useDeferredValue vs. useTransition
Reactã¯ãUIã¢ããããŒããæé©åããããã®å¥ã®ã¡ã«ããºã ã§ããuseTransitionããã¯ãæäŸããŠããŸããuseDeferredValueãšuseTransitionã¯ã©ã¡ããå¿çæ§ãåäžãããããšãç®çãšããŠããŸãããç®çã¯ãããã«ç°ãªããŸãã
useTransitionã¯éåžžãã«ãŒãéã®ç§»åãUIèŠçŽ ã®åãæ¿ããªã©ãç¶æ
ã®ãã©ã³ãžã·ã§ã³ã«äœ¿çšãããŸããç¹å®ã®ç¶æ
ã¢ããããŒãããã©ã³ãžã·ã§ã³ãšããŠããŒã¯ããããšãã§ããReactã¯äœãåªå
床ã§åŠçããŸããããã«ããããã©ã³ãžã·ã§ã³ãã¡ã€ã³ã¹ã¬ããããããã¯ããé
å»¶ãåŒãèµ·ããã®ãé²ããŸãã
äžæ¹ãuseDeferredValueã¯ãå€ã®ã¢ããããŒããé
ãããããã«ç¹å¥ã«èšèšãããŠããŸãããŠãŒã¶ãŒå
¥åãŸãã¯ãã®ä»ã®å€éšãœãŒã¹ããæŽŸçããå€ãããããã®å€ã®ã¢ããããŒããUIããããã¯ããã®ãé²ãããå Žåã«æã圹ç«ã¡ãŸããuseDeferredValueã¯ã2次ãŸãã¯éèŠåºŠã®äœãUIã¢ããããŒããé§åããå€ãæé©åããããã®ç¹æ®ãªããŒã«ãšèããããšãã§ããuseTransitionã¯ç¶æ
ãã©ã³ãžã·ã§ã³å
šäœã®åªå
é äœã管çããŸãã
èŠçŽãããšïŒ
- useTransition:ç¶æ ã¢ããããŒããåªå 床ã®äœããã©ã³ãžã·ã§ã³ãšããŠããŒã¯ããŸããã«ãŒãã®å€æŽãUIèŠçŽ ã®åãæ¿ãã«æé©ã§ãã
- useDeferredValue:ç¹å®ã®å€ãã¢ããããŒããé ãããŸããããã«ããããã®å€ã«äŸåããUIã®éšåãåŸã§ã¢ããããŒããããŸããå ¥åãã£ã«ã¿ãªã³ã°ããããé ããœãŒã¹ããã®ããŒã¿ã®è¡šç€ºã«æé©ã§ãã
çµè«ïŒåªããReactããã©ãŒãã³ã¹ã®ããã«é å»¶ã¢ããããŒããæ¡çšãã
Reactã®useDeferredValueããã¯ã¯ãUIã®éèŠåºŠã®äœãéšåãžã®ã¢ããããŒããé
ãããããšã«ããããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãæé©åããããã®åŒ·åã§ãšã¬ã¬ã³ããªãœãªã¥ãŒã·ã§ã³ãæäŸããŸããé
å»¶ã¢ããããŒãã®èåŸã«ããååãçè§£ããuseDeferredValueãè³¢æã«é©çšããããšã§ãããå¿çæ§ãé«ããããã©ãŒãã³ã¹ãé«ããæ¥œããReactã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ã§ããŸããé
å»¶ã¢ããããŒãã®é©åãªåè£ãæ³šææ·±ãç¹å®ããããã©ãŒãã³ã¹ã®åäžã枬å®ããå¿
èŠã«å¿ããŠä»£æ¿ã®æé©åææ³ãæ€èšããããšãå¿ããªãã§ãã ããããããã®ãã¹ããã©ã¯ãã£ã¹ãæ¡çšããããšã§ãuseDeferredValueã®å¯èœæ§ãæå€§éã«åŒãåºããäžçäžã®ãŠãŒã¶ãŒã«åªãããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãæäŸã§ããŸãã
ãŠã§ãéçºãé²åãç¶ããã«ã€ããŠãé
å»¶ã¢ããããŒãã®ãããªææ³ã¯ã髿§èœã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããããã«ãŸããŸãéèŠã«ãªããŸããuseDeferredValueããã®ä»ã®Reactæé©åããŒã«ãç¿åŸããããšã¯ãåªãããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãäœæããããšããŠãããã¹ãŠã®éçºè
ã«ãšã£ãŠäžå¯æ¬ ã§ãã